package com.qf.air.controller;

import com.github.pagehelper.PageInfo;
import com.qf.air.dto.AirAddDTO;
import com.qf.air.dto.AirUpdateDTO;
import com.qf.air.entity.AirQualityIndex;
import com.qf.air.service.AirQualityService;
import com.qf.air.vo.AirVO;
import com.qf.air.vo.R;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Base64Utils;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;

/**
 * 空气质量Controller层
 * @author zjw
 * @description
 * @date 2021/10/8 17:07
 */
@RestController
@RequestMapping("/air")
@CrossOrigin
public class AirQualityController {

    @Autowired
    private AirQualityService airQualityService;

    /**
     * 根据文档编写查询空气质量信息
     * @param page   当前页
     * @param rows   每页条数
     * @param districtId    区域id
     * @return
     */
    @GetMapping(value = "/list")
    public R list(@RequestParam(defaultValue = "1") Integer page,
                  @RequestParam(value = "limit",defaultValue = "10") Integer rows,
                  Integer districtId){
        // 调用service查询数据
        PageInfo<AirQualityIndex> pageInfo = airQualityService.findByDistrictIdAndPage(page, rows, districtId);

        // 获取count，数据总条数
        long count = pageInfo.getTotal();

        // 获取list，拿到data中需要的数据 （需要将List<AirQualityIndex>，转换为List<VO>）
        List<AirQualityIndex> list = pageInfo.getList();
        List<AirVO> data = new ArrayList<>();
        for (AirQualityIndex airQualityIndex : list) {
            AirVO vo = new AirVO();
            BeanUtils.copyProperties(airQualityIndex,vo);
            vo.setDistrictName(airQualityIndex.getDistrict().getName());
            data.add(vo);
        }
        // 响应数据
        return R.ok(count,data);
    }

    /**
     * 添加空气质量信息
     * @param airAddDTO   接收的请求参数
     * @param bindingResult   收集校验信息
     * @return
     */
    @PostMapping("/add")
    public R add(@Valid AirAddDTO airAddDTO, BindingResult bindingResult){
        // 校验参数
        if(bindingResult.hasErrors()){
            String msg = bindingResult.getFieldError().getDefaultMessage();
            System.out.println("【添加空气质量信息】  参数不合法   msg = " + msg);
            return R.error(18,msg);
        }

        // 封装数据
        AirQualityIndex airQualityIndex = new AirQualityIndex();
        BeanUtils.copyProperties(airAddDTO,airQualityIndex);

        // 调用Service，保存数据库
        airQualityService.insert(airQualityIndex);

        // 返回成功信息
        return R.ok();
    }


    /**
     * 修改空气质量信息
     * @param airUpdateDTO   接收的请求参数
     * @param bindingResult   收集校验信息
     * @return
     */
    @PostMapping("/update")
    public R update(@Valid AirUpdateDTO airUpdateDTO, BindingResult bindingResult){
        // 校验参数
        if(bindingResult.hasErrors()){
            String msg = bindingResult.getFieldError().getDefaultMessage();
            System.out.println("【修改空气质量信息】  参数不合法   msg = " + msg);
            return R.error(18,msg);
        }

        // 封装数据
        AirQualityIndex airQualityIndex = new AirQualityIndex();
        BeanUtils.copyProperties(airUpdateDTO,airQualityIndex);

        // 调用Service，保存数据库
        airQualityService.updateById(airQualityIndex);

        // 返回成功信息
        return R.ok();
    }


    /**
     * 删除空气质量信息
     * @param id   接收的请求参数
     * @return
     */
    @GetMapping("/delete")
    public R delete(Integer id){
        // 校验参数
        if(id == null){
            String msg = "操作不合法！";
            System.out.println("【删除空气质量信息】  参数不合法   msg = " + msg);
            return R.error(18,msg);
        }

        // 调用Service，删除数据
        airQualityService.deleteById(id);

        // 返回成功信息
        return R.ok();
    }

}
